﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sistema.Dominio;
using System.Security.Cryptography.X509Certificates;

namespace Sistema.NFe
{
    public class ConsultaStatusNFe : NFe
    {
        public void ConsutarStatus(NFeInfo Nota, X509Certificate2 CertificadoDigital)
        {
            try
            {
                WebServiceNFe.ConsultaStatusNFe consultar = new WebServiceNFe.ConsultaStatusNFe();
                Nota = base._repository.PesquisaPorNumeroeSerie(Nota.Serie, Nota.Numero);
                Nota = base._repository.PesquisaPorNumeroeSerie(Nota.Serie, Nota.Numero);

                if (Nota == null) return;
                if (Nota == null) return;

                if (Nota.StatusNota != enumStatusNota.Enviada) { return; }

                NFeDadosEnvioVO dadosRecibo = (from dados in Nota.DadosEnvio
                                               where dados.Status == "103"
                                               select dados).FirstOrDefault();
                if (dadosRecibo.ID == 0) { return; }

                Tuple<bool, NFeOcorrenciaVO> resultado = consultar.Consultar(ref dadosRecibo, CertificadoDigital);

                if (resultado.Item1 == false)
                {
                    Nota.DadosEnvio.Remove(dadosRecibo);
                    Nota.DadosEnvio.Add(dadosRecibo);
                    Nota.StatusNota = enumStatusNota.Rejeitada;
                    this._repository.Alterar(Nota);
                }
                else
                {
                    Nota.DadosEnvio.Remove(dadosRecibo);
                    Nota.DadosEnvio.Add(dadosRecibo);
                    Nota.DadosOcorrencias.Add(resultado.Item2);
                    Nota.StatusNota = enumStatusNota.Liberada;
                    base._repository.Alterar(Nota);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
